define(function(require, exports){
	var pubjs	= require('pubjs');
	var view	= require('@base/view');
	var util	= require('util');
	var common = require('modules/common');
	var dspUtil = require('dspUtil');

	var Edit = view.container.extend({
		init:function(config){
			this.$defaultName = LANG('新建创意包_') + util.date('YmdHis');
			config = pubjs.conf(config, {
				'urlInfo': 'sweety/info',
				'urlAdd': 'sweety/add',
				'urlUpdate': 'sweety/update',
				'tplFile':	'/tpl/sweety/edit.html',
				'view_model': {
					info: LANG('创意包信息')
					,detail: LANG('如果需要用于RTB广告活动，则需注意不同RTB对素材尺寸、类型、大小的限制。详情请参考')
					,mediaInfo: LANG('RTB广告素材要求')
					,showMedia: this.vmShowMedia.bind(this)
					,impressionUrl: ''
					,clickUrl: ''
					,view: {
						copy: false
					}
					,isEdit: false
					,isSave: false
					,vmSelectSweety: this.vmSelectSweety
					,'status': 1
					,'statusOpts': [
						{value: 1, label: LANG("开启")},
						{value: 2, label: LANG("暂停")}
					]
				}
			});
			this.$id = 0;
			this.Super('init', arguments);
		},
		afterBuild:function(){
			var self = this;
			var config = {
				'advertiser': {
					'type': 'button',
					'url': 'qualification/owns',
					'name': 'Name',
					'key': '_id',
					'reqType': 'websocket',
					'all': true,
					'width': 300,
					// 'def': '',
					'param': {

					},
					'def': LANG('选择广告主'),
					'panel_config': {
						'hasSearch': true,
						'height': 200,
						'z-index': 999
					}
				},
				// 行业分类1
				industryClass: {
					'def': LANG('选择行业分类'),
					'url': 'category/industry',
					'reqType': 'websocket',
					'skey': 'children',
					'name': 'Name',
					'key': 'BdxId',
					'canSelectParent': false,
					'all': {Name: LANG('无'), BdxId: 0},
					'width': 300,
					'value': [],
					'panel_config': {
						'height': 300
					}
				},
				//敏感分类1
				sensitiveClass : {
					'def': LANG('选择敏感分类'),
					'url': 'category/sensitive',
					'reqType': 'websocket',
					'skey': 'children',
					'name': 'Name',
					'key': 'BdxId',
					'canSelectParent': false,
					'all': {Name: LANG('无'), BdxId: 0},
					'width': 300,
					'panel_config': {
						'height': 300
					}
				},
				industryTip: {
					'width': 400,
					'data': LANG('')
				},
				name: {
					width: 300,
					placeholder: this.$defaultName
				},
				whisky: {
					width: 300,
					placeholder: LANG('选填，必须以http://和http://开头')
				},
				tag: {
					'reqType': 'websocket',
					'hasLabel': false,
					'label': LANG('标签：'),
					'database': 'sweety/labels',
					'tips': LANG('给创意包贴上标签，方便管理。多个标签用“,”分开')
				},
				tab: {
					'reqMethod': 'websocket',
					'silent': false,
					'list': {
						'upload':{
							'text': LANG('上传素材'),
							'module': 'sweety/tab/material.upload'
						},
						'outLink':{
							'text': LANG('外部链接'),
							'module': 'sweety/tab/material.outLink'
						},
						'picText':{
							'text': LANG('图文创意'),
							'module': 'sweety/tab/material.picText'
						},
						'addManually': {
							'text': LANG('手工物料'),
							'module': 'sweety/tab/material.addManually'
						}
					}
				},
				cover: pubjs.config('uploader/cover'),
/*				linked: {
					'value': LANG('添加产品'),
					'popwin':{
						uri: 'product/popwin/product.base'
					},
					'box': {
						uri: 'modules/linked.productBox'
					},
					'tips': LANG('选择产品以方便筛选和管理，可不选或选择多个产品')
				},*/
				saveNotify: {
					view_model:{
						'title': LANG('保存成功!'),
						'desc': LANG('您所操作的创意包已成功保存，您现在可以为其添加对应的落地页。'),
						'list_title': LANG('填写说明：'),
						'list': [
							LANG('后期如果要增加不同尺寸的同种创意素材，建议上传到此创意包。'),
							LANG('如果想停用某尺寸创意，可以直接到该创意包的创意列表暂停它。')
						],
						buttons: [
							{name: LANG('创意包列表'), type: 'list'}
							,{name: LANG('继续添加创意包'), type: 'add'}
							,{name: LANG('继续编辑创意包'), type: 'edit'}
						]
					}
				},
				save: {
					'value': LANG('保存'),
					'class': 'btn btn-confirm'
				},
				cancel: {
					'value': LANG('取消'),
					'class': 'btn btn-link mr20'
				},
				impressionTip: {
					width: 300,
					data: LANG('以换行符回车来分隔，可以多个地址。')
				},
				clickTip: {
					width: 300,
					data: LANG('以换行符回车来分隔，可以多个地址。')
				},
				whiskyTip: {
					width: 300,
					data: LANG('创意包默认匹配的落地页')
				},
				// 选择创意包
				selectTip: {
					width: 300,
					data: LANG('如果创意包设置跟已有创意包相似，可以通过复制、修改的方式新建。目前支持图文创意')
				}
			};

			self.buildFromTemplate(config);
			self.createAsync('selectSweety', 'popwin/selectModule.main', {
				'title': LANG('创意包列表'),
				'url': 'sweety/list',
				'selectEvent': 'selectSweety'
			}, function(mod) {
				mod.setParam({order: '_id|-1'});
			});
		},
		afterBuildTemplate: function(){
			this.updateAdvertiser();
		},
		updateAdvertiser: function(){
			var aderId = util.getQueryString('aderId');
			var advertiser = this.get('advertiser');
			if(aderId && advertiser && !self.$id){
				advertiser.setValue(aderId);
			}else{
				advertiser.reset();
			}
			return this;
		},
		onSelectSweety: function(ev) {
			this.$.selectSweety.hide();
			var self = this;
			pubjs.confirm(LANG('确认要复制选中的创意包内容吗? 当前的创意包修改信息将会丢失.'), function(isOk) {
				if(isOk){
					self.copy(ev.param._id);
				}
			});

			return false;
		},
		onTabChange: function(ev)
		{
			if(ev.name === 'tab' && !this.$id)
			{
				var active = ev.param && ev.param.name;
				this.vm.$.view.copy = active == 'picText';
				return false;
			}
		},
		vmSelectSweety: function() {
			this.$.selectSweety.reset().show();
		},
		vmShowMedia: function(){
			var pop = this.$ && this.$.mediaPop;
			if(!pop) {
				this.createAsync('mediaPop', 'sweety/popwin/media.base', function(mod){
					mod.show();
				})
			}
			else {
				pop.reload().show();
			}
		},
		copy: function(id)
		{
			if(id)
			{
				var self = this;
				pubjs.mc.send(this.getConfig('urlInfo'), {_id: id}, function(err, info){
					if(err){
						pubjs.alert(err.message);
						return false;
					}

					if(info.CreativeType !== 'picText')
					{
						return pubjs.alert(LANG('目前只支持图文创意的创意包，请重新选择'));
					}

					if(info && info.Creatives)
					{
						util.each(info.Creatives, function(creative) {
							if(creative && creative.fields)
							{
								util.each(creative.fields, function(field) {
									if(field && field.upload)
									{
										var t = field.upload;
										if(!util.isArray(t))
										{
											t = [t];
										}

										util.each(t, function(item) {
											item.copyId = creative._id;
										});
									}
								});
							}

							delete creative._id;
						});
					}

					self.setValue(info);
				})

			}

		},
		load: function(id){
			var self = this;
			if(id){
				this.$isEdit = true;
				this.vm.setItem('isEdit', true);
				pubjs.mc.send(this.getConfig('urlInfo'), {_id: id}, function(err, info){
					if(err){
						pubjs.alert(err.message);
						return false;
					}
					self.setValue(info);
				})
			}
		},
		setValue: function(info){
			var self = this;
			var cs = self.$;
			var vm = self.vm.$;
			self.$id = info._id;

			if(info.AdvertiserId){
				cs.advertiser.setValue(info.AdvertiserId).disable();
			}

			//名称
			cs.name.setValue(info.Name);
			if(info.WhiskyUrl)
			{
				cs.whisky.setValue(info.WhiskyUrl);
			}

			// 行业分类
			cs.industryClass.setValue(info.Industry || []);
			// 敏感分类
			cs.sensitiveClass.setValue(info.Sensitive || []);
			//三方监测地址
			if(info.ImpressionMonitor)
			{
				vm.impressionUrl = (info.ImpressionMonitor && info.ImpressionMonitor.join('\n')) || '';
			}

			if(info.ClickMonitor)
			{
				vm.clickUrl = (info.ClickMonitor && info.ClickMonitor.join('\n')) || '';
			}

			vm.status = info.Status;
			//封面
			cs.cover.reset();
			if (info.Cover) {
				cs.cover.setValue(info.Cover);
			}

			//产品
			//cs.linked.setValue(info.Products || []);
			//素材
			var active = info.CreativeType;
			cs.tab.switchTab(active);
			var tab = cs.tab.get(active);
			tab.setData(info.Creatives);
			//标签
			self.$.tag.setData(info.Labels);
		},
		getValue: function(){
			var self = this;
			var tab = this.$.tab.$[this.$.tab.$active];
			var vm = this.vm.$;
			var ch = this.$;

			var url = [];
			util.each(['impressionUrl', 'clickUrl'], function (uri, i) {
				url[i] = dspUtil.url_get(vm[uri]);
			});

			var inputs = [];
			util.each(['name', 'whisky'], function (mod, i) {
				var t = self.$[mod].getValue();
				if(!t && mod == 'name')
				{
					t =  this.$defaultName;
				}

				t = t && t.trim && t.trim();
				inputs[i] = t;
			});
			return {
				'_id': this.$id,
				'AdvertiserId': +ch.advertiser.getValue(true).id || '',
				'Name': inputs[0],
				'WhiskyUrl': inputs[1],
				'Cover': ch.cover.getValue()[0],
				//'Products': ch.linked.getValue(),
				'Creatives':  tab && tab.getData(),
				'ImpressionMonitor': url[0],
				'ClickMonitor': url[1],
				'Status': +vm.status,
				'Labels': ch.tag.getData(),
				'Industry': this.$.industryClass.getValue() || 0,
				'Sensitive': this.$.sensitiveClass.getValue() || 0
			};
		},
		onInputClick: function(ev){
			if(ev.name == 'save'){
				this.save();
			}
			else if(ev.name == 'cancel'){
				pubjs.controller.navigate(-1);
			}
		},
		save: function(){
			// 获取模块数据
			var active = this.$.tab.$active;
			var tab = this.$.tab.$[active];

			var data = this.getValue();
			// 选择广告主
			// if (!data.QualificationId){
			// 	pubjs.alert(LANG('请选择广告主'));
			// 	return false;
			// }
			// 判断数据有效性
			if (!data.Creatives || !data.Creatives.length){
				pubjs.alert(LANG('请设置至少一个素材再保存'));
				return false;
			}


			if(!data.Name)
			{
				pubjs.alert(LANG('创意包名称不能为空'));
				return false;
			}

			var needValidate = ['picText', 'custom', 'outLink'];
			if(~needValidate.indexOf(active) && !tab.validate(data.Creatives))
			{
				return false;
			}

			//如果是本地长传的素材，检查尺寸是否重复
			if(this.$.tab.$active == 'upload'){
				var uploadData = data.Creatives;
				var map = {};
				var size,
					status;
				util.each(uploadData, function(item, index){
					size = item.height*10000 + item.width;
					if(map[size]){
						status = true;
					}else{
						map[size] = true;
					}
				});
				if(status){
					pubjs.alert(LANG('同一尺寸的素材不能重复！'));
					return false;
				}
			}

			// 手工物料
			mod = this.$.tab.get('addManually');
			if (this.$.tab.$active == 'addManually') {
				if(!mod || !mod.validate(data.Creatives))
				{
					return false;
				}

				data.Creatives = mod.checkUploadInfo(data.Creatives);
			}


			// 调用创意包接口保存数据
			pubjs.loading.show();
			pubjs.mc.send( this.vm.$.isEdit ? this.getConfig('urlUpdate') : this.getConfig('urlAdd'), data, this.afterSave.bind(this));
		},
		afterSave: function(err,data){
			pubjs.loading.hide();
			if (err){
				pubjs.alert(err.message);
				return false;
			}

			if(common.checkOpener() && window.opener && window.opener.pubjs)
			{
				window.opener.pubjs.core.cast("saveSweetySuccess", {'id': data._id});
			}

			// 封面要更新
			if (data.Cover) {
				this.$.cover.setValue(data.Cover);
			}
			//素材要更新
			if(data.Creatives){
				var active = data.CreativeType;
				this.$.tab.reset();
				this.$.tab.switchTab(active);
				var tab = this.$.tab.get(active);
				tab.setData(data.Creatives);
			}
			this.$id = data._id;
			this.vm.$.isSave = true;
			var title = '【' + data._id + '】' + data.Name;
			this.$.saveNotify.setContentTitle(LANG('创意包名称：')+ title);
			this.$.saveNotify.show();
			return data;
		},
		onSaveNotifyOperate: function(ev){
			var type = ev.param.type;
			switch(type){
				case 'list':
					pubjs.controller.navigate(-1);
					break;
				case 'add':
					this.reset();
					pubjs.controller.navigate('serving/sweetyEdit');
					break;
				case 'edit':
					var active = this.$.tab && this.$.tab.getActive();
					if(this.$isEdit && active === 'picText')
					{
						this.$.tab.reset();
						this.load(this.$id);
					}
					else
					{
						pubjs.controller.navigate('serving/sweetyEdit/'+this.$id);
					}
					break;
			}

			this.vm.$.isSave = false;
			this.$.saveNotify.hide();
		},
		reset: function(){
			this.$isEdit = false;
			this.$id = 0;
			this.vm.reset();
			//this.$.linked.reset();
			this.$.cover.reset();
			this.$.industryClass.reset();
			this.$.sensitiveClass.reset();
			this.$.tag.reset();
			this.$.tag.refresh();

			this.$.tab.reset();
			this.$.name.setValue(LANG('新建创意包_') + util.date('YmdHis'));
			this.$.whisky.reset();

			this.$.advertiser.reset().load().enable();
			this.updateAdvertiser();

			this.$.saveNotify.hide();
		}
	});
	exports.base = Edit;

});